/*
 * global.h
 *
 *  Created on: 16.06.2013
 *      Author: SpirTanol
 */

#ifndef GLOBAL_H_
#define GLOBAL_H_

#include <QVector>
#include <QString>

class ProtocolEvent;
class QComboBox;

typedef unsigned int uint;
typedef unsigned short ushort;
typedef QVector<ProtocolEvent*> EventList;

void fillComboPort(QComboBox *comboBox, int current);
void fillComboFormat(QComboBox *comboBox);
void fillComboAddr(QComboBox *comboBox);
void fillComboSpeed(QComboBox *comboBox);

QString crashText(int code);

double max(const QVector <double>&mas);
double min(const QVector <double>&mas);

template<class T>
T* newIn(void *dataPtr) { return new(dataPtr) T(reinterpret_cast<T*>(dataPtr)); }

enum SearchEventType
{
	SET_ERROR,
	SET_STARTED,
	SET_FOUND,
	SET_TEST_FINISHED,
	SET_FINISHED,
	SET_STEP,
	SET_STOPED,
};

enum DataEventType
{
	DET_GET_DATA,
	DET_CONNECT,
	DET_DISCONNECT,
	DET_ERROR,
	DET_RECONNECTION,
	DET_GET_PROTOCOLS,
	DET_CONFIG,
	DET_TIME_WRITED,
	DET_TIME_FAIL,

	DET_RESET_CRASH_PROTOCOL,
	DET_RESET_CRASH_PROTOCOL_FAIL,

	DET_RESET_WORK_PROTOCOL,
	DET_RESET_WORK_PROTOCOL_FAIL,

	DET_RESET_WORK_TIME,
	DET_RESET_WORK_TIME_FAIL,

	DET_RUN_CONFIG_GET,
	DET_RUN_CONFIG_PROGRESS,

	DET_CRASH_OSCILLOGRAM_GET,
	DET_CHANGE_AUTO_CONFIG_STATE,
};

enum Phase
{
	P_A,
	P_B,
	P_C
};

enum AppEventCode
{
	AEC_CONNECT,
	AEC_LOST_CONNECTION,
	AEC_RECONNECT,
	AEC_ENGINE_COMMAND,
	AEC_CONFIG_WRITED,
};

enum EventCode
{
	EC_STOP_ENGINE = 1,
	EC_START_ENGINE = 2,
};

enum CrashCode
{
	CC_CURRENT_IMBALANCE = 10, // Перекос токов фаз
	CC_PHASE_CRASH = 20, // Обрыв одной или двух фаз, холостой ход двигателя
	CC_SHORT_CIRCUIT = 30, // Короткое замыкание
	CC_CUR_OVERLOAD = 31, // Перегрузка по току
	CC_TEMP_OVERLOAD = 32, // Тепловая перегрузка двигателя
	CC_INSULATION_FAILURE = 40, // Нарушение изоляции обмоток двигателя
	CC_VOL_OUT_OF_RANGE = 50, // Выход напряжения сети за установленные границы
	CC_OUT_OF_SEQUENCE = 51, // Нарушение последовательности фаз
	CC_CRASH_RTS = 60, // Обрыв термодатчика РТС
	CC_CIRCUIT_RTS = 61, // Замыкание термодатчика РТС
	CC_TEMP_OVERLOAD_RTS = 62, // Перегрев двигателя (по термодатчику PTC)
	CC_CRASH_RT100 = 63, // Обрыв термодатчика PT100
	CC_CIRCUIT_RT100 = 64, // Замыкание термодатчика PT100
	CC_TEMP_OVERLOAD_RT100 = 65, // Перегрев двигателя (по термодатчику PT100)
	CC_CRASH_WET = 70, // Обрыв датчика влажности
	CC_WATER_PENETRATION = 72, // Попадание воды в картер насоса
	CC_EXTERNAL_CRASH_IN1 = 81, // Внешняя авария вход 1
	CC_EXTERNAL_CRASH_IN2 = 82, // Внешняя авария вход 2
};

enum ScaleType
{
	ST_LINEAR,
	ST_LOGO,
};

int getTimeout(int speed);

#endif /* GLOBAL_H_ */
